package com.yang.singleton;

import java.util.Objects;

/*
* 懒汉式+锁+减少同步代码块
* 存在线程不安全的问题，因为第一个if判断条件有可能导致在对象没有实例化之前，不同的线程进入到if代码块中，拿到锁之后进行实例化
* */
public class Singleton5 {

    //构造方法私有化
    private Singleton5(){}

    private static Singleton5 INSTANCE;

    public static Singleton5 getInstance() {
        if (Objects.isNull(INSTANCE)) {
            //试图通过减小同步代码块的方式提高效率，但是并不可行
            synchronized (Singleton5.class) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                INSTANCE = new Singleton5();
            }
        }
        return INSTANCE;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 50; i++) {
            new Thread(() -> {
                System.out.println(Singleton5.getInstance().hashCode());
            }).start();
        }
    }
}
